#include <head.h>
int main(int argc, char const *argv[])
{
    // 1.创建套接字
    int sock_fd = socket(AF_INET, SOCK_STREAM, 0);
    if (-1 == sock_fd)
    {
        perror("socket error");
        return -1;
    }
    // 2、填充服务器网络信息结构体
    struct sockaddr_in server_addr;
    memset(&server_addr, 0, sizeof(server_addr));
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(8888); // 端口号可以随意指定
    // IP 地址不能乱填 填写自己主机的IP地址
    // 如果是本机测试 则使用 127.0.0.1 本地回环地址  192.168.110.131
    server_addr.sin_addr.s_addr = inet_addr("192.168.10.130");

    socklen_t sock_len = sizeof(server_addr);

    // 3、将套接字与服务器的网络信息结构体绑定
    if (-1 == bind(sock_fd, (struct sockaddr *)&server_addr, sock_len))
    {
        perror("bind error:");
        return -1;
    }

    // 4、将套接字设置城 监听状态
    listen(sock_fd, 5);
    // 5、阻塞等待客户端连接 accept
    printf("等待客户端接入 ..\n");
    int sock_acc_fd = accept(sock_fd, NULL, NULL);
    printf("等待客户端接入 成功\n");
    // 6、数据收发 write read
    // 接收数据
    char buf[128] = {0};
    while (1)
    {
        printf("开始聊天\n");
        memset(buf, 0, sizeof(buf));
        printf("服务端输入：");
        fgets(buf, sizeof(buf), stdin);
        if (!strcmp(buf, "quit\n"))
        {
            printf("退出成功\n");
            write(sock_fd, buf, strlen(buf));
            close(sock_acc_fd);
            close(sock_fd);
            return 0;
        }
        write(sock_acc_fd, buf, strlen(buf));
        memset(buf, 0, sizeof(buf));
        read(sock_acc_fd, buf, sizeof(buf));
        printf("客户端输入：%s\n", buf);
    }
    // 7、关闭套接字  close
    close(sock_acc_fd);
    close(sock_fd);

    return 0;
}
